/**
 * 复制文本到剪贴板
 * @param {string} text - 要复制的文本
 * @param {Function} successCallback - 成功回调函数
 * @param {Function} errorCallback - 失败回调函数
 */
export function copyToClipboard(text, successCallback, errorCallback) {
  if (!text) {
    if (errorCallback) {
      errorCallback('没有可复制的数据');
    }
    return;
  }

  try {
    // 创建临时文本区域
    const textArea = document.createElement('textarea');
    textArea.value = text;
    textArea.style.position = 'fixed';
    textArea.style.left = '-999999px';
    textArea.style.top = '-999999px';
    document.body.appendChild(textArea);
    textArea.focus();
    textArea.select();

    // 执行复制
    const successful = document.execCommand('copy');
    document.body.removeChild(textArea);

    if (successful) {
      if (successCallback) {
        successCallback('复制成功');
      }
    } else {
      // 降级方案：使用现代API
      if (navigator.clipboard && navigator.clipboard.writeText) {
        navigator.clipboard
          .writeText(text)
          .then(() => {
            if (successCallback) {
              successCallback('复制成功');
            }
          })
          .catch(() => {
            if (errorCallback) {
              errorCallback('复制失败');
            }
          });
      } else {
        if (errorCallback) {
          errorCallback('复制失败，请手动复制');
        }
      }
    }
  } catch (error) {
    console.error('复制失败:', error);
    if (errorCallback) {
      errorCallback('复制失败');
    }
  }
}

/**
 * 复制选中的文本到剪贴板
 * @param {Function} successCallback - 成功回调函数
 * @param {Function} errorCallback - 失败回调函数
 */
export function copySelectedText(successCallback, errorCallback) {
  const selection = window.getSelection();
  if (!selection || !selection.toString().trim()) {
    if (errorCallback) {
      errorCallback('请先选择要复制的内容');
    }
    return;
  }

  const selectedText = selection.toString();
  copyToClipboard(selectedText, successCallback, errorCallback);
}

/**
 * 创建选择复制提示
 * @param {Function} copyCallback - 复制回调函数
 * @returns {Object} 包含tip元素和清理方法的对象
 */
export function createSelectionCopyTip(copyCallback) {
  // 移除之前的提示
  const existingTip = document.querySelector('.selection-copy-tip');
  if (existingTip) {
    document.body.removeChild(existingTip);
  }

  // 创建提示元素
  const tip = document.createElement('div');
  tip.className = 'selection-copy-tip';
  tip.innerHTML = `
    <div class="tip-content">
      <span class="tip-text">选中内容可复制</span>
      <el-button 
        type="text" 
        size="mini" 
        icon="el-icon-copy-document"
        class="tip-copy-btn"
      >
        复制选中
      </el-button>
    </div>
  `;

  // 添加到页面
  document.body.appendChild(tip);

  // 绑定复制事件
  const copyBtn = tip.querySelector('.tip-copy-btn');
  copyBtn.addEventListener('click', copyCallback);

  // 返回清理方法
  return {
    tip,
    cleanup: () => {
      if (tip && tip.parentNode) {
        document.body.removeChild(tip);
      }
    },
  };
}
